package org.batatasframework.bytecode.spi;

import org.springframework.asm.MethodVisitor;

public interface AsmInvokable {
	
	/**
	 * <pre>
	 * 注意：如果调用的方法有返回值，但调用的地方不需要用返回值进行处理时，需要添加"visitor.visitInsn(POP);"指令
	 * </pre>
	 * @param object 方法所在的对象，有可能是"this"，也可以是本地变量或成员变量等
	 * @param visitor
	 * @param getters
	 */
	void invoke(AsmLoadable object, MethodVisitor visitor, AsmLoadable...getters);
	
	/**
	 * <pre>
	 * 参考:{@link #invoke(AsmLoadable, MethodVisitor, AsmLoadable...)}
	 * 
	 * 如果是调用静态的方法，则不需要变量
	 * </pre>
	 * @param visitor
	 * @param getters
	 */
	void invoke(MethodVisitor visitor, AsmLoadable...getters);
}
